package ma.moliere.persistance.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.commons.collections.CollectionUtils;

import ma.moliere.persistance.IGestionDesNotesPersistance;
import ma.moliere.persistance.oe.Inscription;
import ma.moliere.persistance.oe.NotessaisienormalePremiere;
import ma.moliere.transverse.utils.NotePremiereUtil;
import ma.moliere.transverse.vo.NotessaisienormalePremiereAffichee;

public class GestionDesNotesPersistanceImpl implements IGestionDesNotesPersistance,Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5341511452510563222L;

	@PersistenceContext
	private EntityManager entityManager;
	
	@Override
	public NotessaisienormalePremiereAffichee ajouterNotePremiere(
			NotessaisienormalePremiereAffichee note) {
		NotessaisienormalePremiere entite = NotePremiereUtil.copieVoVersOe(note);
		entityManager.persist(entite);
		
		entityManager.clear();
		return NotePremiereUtil.copieOeVersVo(entite);
	}

	@Override
	public NotessaisienormalePremiereAffichee modifierNotePremiere(
			NotessaisienormalePremiereAffichee note) {
		NotessaisienormalePremiere entite = NotePremiereUtil.copieVoVersOe(note);
		entityManager.merge(entite);
		entityManager.flush();
		return NotePremiereUtil.copieOeVersVo(entite);
	}

	@Override
	public List<NotessaisienormalePremiere> recherchernotePremiere() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<NotessaisienormalePremiereAffichee> rechercherNotesPremiere(
			Long idAnneescolaire, Long idClasse, Long idGroupe,String semestre, String evaluation) {
		final StringBuilder vRequete = new StringBuilder();
		vRequete.append(" SELECT note FROM NotessaisienormalePremiere note ");
		vRequete.append(" WHERE 1=1");
		if(idAnneescolaire !=null){
			vRequete.append(" AND note.anneescolaire =:idAnneescolaire");
		}
		if(idClasse !=null){
			vRequete.append(" AND note.classe =:idClasse");
		}
		if(idGroupe !=null){
			vRequete.append(" AND note.groupe =:idGroupe");
		}
		if(semestre !=null){
			vRequete.append(" AND note.semestre =:semestre");
		}
		if(evaluation !=null){
			vRequete.append(" AND note.evaluation =:evaluation");
		}
		
		final Query vQuery = entityManager.createQuery(vRequete.toString());
		
		if(idAnneescolaire != null){
			vQuery.setParameter("idAnneescolaire", idAnneescolaire);
		}
		if(idClasse != null){
			vQuery.setParameter("idClasse", idClasse.toString());
		}
		if(idGroupe != null){
			vQuery.setParameter("idGroupe", idGroupe.toString());
		}
		if(semestre != null){
			vQuery.setParameter("semestre", semestre.toString());
		}
		if(evaluation != null){
			vQuery.setParameter("evaluation", evaluation);
		}
		
		final List<NotessaisienormalePremiere> resultats= vQuery.getResultList();
		final List<NotessaisienormalePremiereAffichee> resultatsFinal = new ArrayList<NotessaisienormalePremiereAffichee>();
		if(CollectionUtils.isNotEmpty(resultats)){
			for(NotessaisienormalePremiere note : resultats){
				resultatsFinal.add(NotePremiereUtil.copieOeVersVo(note));
			}
			
		}
		return resultatsFinal;
	}

}
